console.log('=========================')

let flag:boolean = false 
console.log('flag = ', flag)

let num1:number = 1
console.log('num1 = ', num1)

let un1 : undefined = undefined 
let un2 : null = null 
// undefined 、 null 可以赋值给其他类型
let un3: string = un1 
let un4: string = un2 
console.log('un1 = ', un1)
console.log('un2 = ', un2) 

console.log('=========================')


// 数组类型
// 数组定义方式1 
// let 变量名： 数据类型[] = [值1， 值2, 值3]
let arr1: number[] = [1,2,3]
console.log('arr1 = ', arr1)
let arr2: Array<number> = [100, 200, 300]
console.log('arr2 = ', arr2)

// 元组类型
let arr3: [string, number, boolean] = [
    '小甜 甜', 100.123234, false
]
console.log('arr3 = ', arr3)

// 注意问题： 元素类型在使用的时候， 数据的类型
// 的位置的数据个数，应该与定义元素时候的数据类型和数据位置相一致
console.log(arr3[0].split[' '])
console.log(arr3[1].toFixed(2))

console.log('=========================')


// 枚举类型, 枚举里面的每个数据值都可以叫元素
// 每个元素有自己的下标
enum Color {
    red,
    green,
    blue  
}

let color:Color = Color.red 
console.log(color)
console.log(Color.red, Color.blue)
console.log(Color[2])

console.log('=========================')

//  any 类型
let str : any = 100 
str  = "我是字符串啊"
let arr_any: any[] = [1,2, 'str']
console.log(arr_any)


//  void 类型, 
function showMsg(): void{
    console.log("只要===== void")
}
showMsg()
console.log(showMsg())

console.log('=========================')

// object 类型
function getObj(obj: object):object {
    console.log(obj)
    return {
        name : '卡夫卡',
        age: 27
    }
}
console.log(getObj({name: '左右',age: 20}))
console.log(getObj({str: 123}))
console.log(getObj(new String('123')))

// 联合类型 Union Types

function getString(str:number|string):string{
    return str.toString()
}
console.log(getString('123'))
console.log(getString(123444))

// 类型断言 
// 1. <类型>值
// 2. (值 as <类型>)
function getLength(str:number|string):number{
    // return str.toString().length

     // 类型断言 (<string>str)
    if((<string>str).length) {
        return (str as string).length
    }else {
        return str.toString().length
    }
}
console.log(getLength(12323))
console.log(getLength('123'))

// 类型推断 
let b9 = 123  // 推断  number 类型
// b9 = 'str1'
let b10  //  推断 any 类型
b10 = 'str'
console.log('b9 = ', b9) 
console.log('b10 = ', b10)












































